package com.lagou.xml04;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

/**
 * @Author wsl
 * @Date 2021/8/24 21:17
 * @Project_Name mysql
 */
public class TestXPath {

    /**
     * 1. 使用selectSingleNode方法 查询指定节点中的内容
     */
    @Test
    public void test1() throws DocumentException {
        //1.创建解析器对象
        SAXReader sr = new SAXReader();

        //2.获取文档对象
        Document document =
     sr.read("E:\\IdeaStudyProjects\\mysql\\xml_module2_3\\src\\com\\lagou\\xml04\\book.xml");

        //3.调用 selectSingleNode() 方法,获取name节点对象
        Node node1 = document.selectSingleNode("/bookstore/book/name");
        System.out.println("节点："+ node1.getName());
        System.out.println("书名："+ node1.getText());

        //4.获取第二本书的名称
        Node node2 = document.selectSingleNode("/bookstore/book[2]/name");
        System.out.println("第二本书的书名为："+ node2.getText());
    }

    /**
     * 2.使用selectSingleNode方法 获取属性值,或者属性值对应的节点
     */
    @Test
    public void test2() throws DocumentException {
        //1.创建解析器对象
        SAXReader sr = new SAXReader();

        //2.获取文档对象
        Document document =
     sr.read("E:\\IdeaStudyProjects\\mysql\\xml_module2_3\\src\\com\\lagou\\xml04\\book.xml");

        //3.获取第一个book节点的 id属性的值
        Node node1 = document.selectSingleNode("/bookstore/book/attribute::id");
        System.out.println("第一个book的id值为："+ node1.getText());

        //4.获取最后一个book节点的 id属性的值
        Node node2 = document.selectSingleNode("/bookstore/book[last()]/attribute::id");
        System.out.println("最后一个book的id值为："+ node2.getText());

        //5.获取id属性值为 book2的 书名
        Node node3 = document.selectSingleNode("/bookstore/book[@id='book2']");
        String name = node3.selectSingleNode("name").getText();
        System.out.println("id为book2的书名是："+ name);
    }

    /**
     * 3.使用 selectNodes()方法 获取对应名称的所有节点
     */
    @Test
    public void test3() throws DocumentException {
        //1.创建解析器对象
        SAXReader sr = new SAXReader();

        //2.获取文档对象
        Document document =
     sr.read("E:\\IdeaStudyProjects\\mysql\\xml_module2_3\\src\\com\\lagou\\xml04\\book.xml");

        //3.获取所有节点,打印节点名
        List<Node> list = document.selectNodes("//*");
        for (Node node: list){
            System.out.println("节点名："+ node.getName());
        }

        //4.获取所有的书名
        List<Node> names = document.selectNodes("//name");
        for (Node name: names){
            System.out.println("书名："+ name.getText());
        }

        //5.获取指定 id值为book1的节点的所有 内容
        List<Node> book1 = document.selectNodes("/bookstore/book[@id='book1']//*");
        for (Node node: book1){
            System.out.println(node.getName()+ " = "+node.getText());
        }
    }
}
